package com.yihusitian.leecode.algorithm.easy;

/**
 * 给你两个二进制字符串，返回它们的和（用二进制表示）。
 *
 * 输入为 非空 字符串且只包含数字 1 和 0。
 */
public class AddBinary {


    public String addBinary(String a, String b) {
        if (a == null || b == null || a.length() == 0 || b.length() == 0) {
            return "";
        }
        int alen = a.length();
        int blen = b.length();
        int zerolen = Math.abs(alen - blen);
        if (zerolen > 0) {
            char[] zerochar = new char[zerolen];
            for (int i = 0; i < zerolen; i++) {
                zerochar[i] = '0';
            }
            if (alen > blen) {
                b = new String(zerochar) + b;
            } else {
                a = new String(zerochar) + a;
            }
        }
        char[] achs = a.toCharArray();
        char[] bchs = b.toCharArray();
        char[] result = new char[achs.length + 1];
        int lastjin = 0;
        for (int i = achs.length - 1; i >= 0; i--) {
           int av = '0' == achs[i] ? 0 : 1;
           int bv = '0' == bchs[i] ? 0 : 1;
           int absum = av + bv + lastjin;
           if (absum == 3) {
               lastjin = 1;
               result[i + 1] = '1';
           } else if (absum == 2) {
               lastjin = 1;
               result[i + 1] = '0';
           } else if (absum == 1) {
               lastjin = 0;
               result[i + 1] = '1';
           } else if (absum == 0) {
               lastjin = 0;
               result[i + 1] = '0';
           }
        }
        if (lastjin == 0) {
           return new String(result, 1, result.length - 1);
        }
        result[0] = '1';
        return new String(result);
    }

    public static void main(String[] args) {
        System.out.println(new AddBinary().addBinary("01", "11010"));
    }
}
